/**
 *
 */
package com.cougil.uoc.seghismed.webservice.impl;

import java.util.List;

import javax.jws.WebService;

import com.cougil.uoc.seghismed.business.GestorService;
import com.cougil.uoc.seghismed.business.MetgeService;
import com.cougil.uoc.seghismed.model.ciphed.HistorialCiphed;
import com.cougil.uoc.seghismed.model.ciphed.MetgeCiphed;
import com.cougil.uoc.seghismed.model.ciphed.PacientCiphed;
import com.cougil.uoc.seghismed.model.ciphed.VisitaCiphed;
import com.cougil.uoc.seghismed.utils.SeghismedException;
import com.cougil.uoc.seghismed.webservice.MetgeWebService;

/**
 * Classe que implementa el servei web ofert/consumit per l'aplicatiu Metge
 *
 * @author Ignacio Cougil Jares
 *
 */
@WebService(endpointInterface = "com.cougil.uoc.seghismed.webservice.MetgeWebService", serviceName = "MetgeWebService")
public class MetgeWebServiceImpl extends CoreWebServiceImpl implements MetgeWebService {

	private GestorService gestorService;
	private MetgeService metgeService;

	/*
	 * (non-Javadoc)
	 *
	 * @see
	 * com.cougil.uoc.seghismed.webservice.MetgeWebService#afegirVisita(com.cougil.uoc.seghismed
	 * .model.ciphed.MetgeCiphed, com.cougil.uoc.seghismed.model.ciphed.PacientCiphed,
	 * com.cougil.uoc.seghismed.model.ciphed.VisitaCiphed)
	 */
	@Override
	public void afegirVisita(MetgeCiphed metge, PacientCiphed pacient, VisitaCiphed visita) {
		if (this.isAutenticat(metge)) {
			// consultem el pacient, per si aquest metge no ha de tenir accés a les dades que preten accedir
			PacientCiphed pCiphed = this.gestorService.consultarPacient(metge, pacient);
			if (pCiphed != null) {
				// llavors el metge té accés a l'historial del pacient, per tant podem intentar afegir la nova visita
				this.gestorService.afegirVisita(metge, pacient, visita);
			}
		} else {
			throw new SeghismedException("Metge [" + metge + "] no autenticat!!!!");
		}
	}

	/*
	 * (non-Javadoc)
	 *
	 * @see
	 * com.cougil.uoc.seghismed.webservice.MetgeWebService#consultarHistorial(com.cougil.uoc.seghismed
	 * .model.ciphed.MetgeCiphed, com.cougil.uoc.seghismed.model.ciphed.PacientCiphed)
	 */
	@Override
	public HistorialCiphed consultarHistorial(MetgeCiphed metge, PacientCiphed pacient) {
		HistorialCiphed hCiphed = null;
		if (this.isAutenticat(metge)) {
			// consultem el pacient, per si aquest metge no ha de tenir accés a les dades que preten accedir
			PacientCiphed pCiphed = this.gestorService.consultarPacient(metge, pacient);
			if (pCiphed != null) {
				// llavors el metge té accés a l'historial del pacient, per tant podem consultar el seu historial
				// emprant el servei del gestor, per tal de carregar totes les dades de l'historial
				hCiphed = this.gestorService.consultarHistorial(pacient, metge);
			}
		} else {
			throw new SeghismedException("Metge [" + metge + "] no autenticat!!!!");
		}
		return hCiphed;
	}

	/* (non-Javadoc)
	 * @see com.cougil.uoc.seghismed.webservice.MetgeWebService#consultarMetge(com.cougil.uoc.seghismed.model.ciphed.MetgeCiphed)
	 */
	@Override
	public MetgeCiphed consultarMetge(MetgeCiphed metge) {
		MetgeCiphed mTrobat = null;
		if (this.isAutenticat(metge)) {
			mTrobat = this.metgeService.consultarMetge(metge);
		} else {
			throw new SeghismedException("Metge ["+metge+"] no autenticat!!!!");
		}
		return mTrobat;
	}

	/* (non-Javadoc)
	 * @see com.cougil.uoc.seghismed.webservice.MetgeWebService#consultarPacient(com.cougil.uoc.seghismed.model.ciphed.MetgeCiphed, com.cougil.uoc.seghismed.model.ciphed.PacientCiphed)
	 */
	@Override
	public PacientCiphed consultarPacient(MetgeCiphed metge, PacientCiphed pacient) {
		PacientCiphed pCiphed = null;
		if (this.isAutenticat(metge)) {
			pCiphed = this.gestorService.consultarPacient(metge, pacient);
		} else {
			throw new SeghismedException("Metge ["+metge+"] no autenticat!!!!");
		}
		return pCiphed;
	}

	/* (non-Javadoc)
	 * @see com.cougil.uoc.seghismed.webservice.MetgeWebService#consultarPacients(com.cougil.uoc.seghismed.model.ciphed.MetgeCiphed)
	 */
	@Override
	public List<PacientCiphed> consultarPacients(MetgeCiphed metge) {
		List<PacientCiphed> pacientsCiphed = null;
		if (this.isAutenticat(metge)) {
			// consultem el conjunt de pacients a través del servei del gestor, per tal de carregar
			// totes les seves dades
			pacientsCiphed = this.gestorService.consultarPacients(metge);
			// Així només obtenim el conjunt de pacients xifrats, amb els seus IDs associats, però
			// sense cap dada dels pacients. Cal fer-ho a través del servei del gestor
			// pacientsCiphed = this.metgeService.consultarPacients(metge);

		} else {
			throw new SeghismedException("Metge [" + metge + "] no autenticat!!!!");
		}
		return pacientsCiphed;
	}

	/*
	 * (non-Javadoc)
	 *
	 * @see
	 * com.cougil.uoc.seghismed.webservice.MetgeWebService#consultarVisita(com.cougil.uoc.seghismed
	 * .model.ciphed.MetgeCiphed, com.cougil.uoc.seghismed.model.ciphed.PacientCiphed,
	 * com.cougil.uoc.seghismed.model.ciphed.VisitaCiphed)
	 */
	public VisitaCiphed consultarVisita(MetgeCiphed metge, PacientCiphed pacient, VisitaCiphed visita) {
		VisitaCiphed vTrobada = null;
		if (this.isAutenticat(metge)) {
			// consultem el pacient, per si aquest metge no ha de tenir accés a les dades que preten accedir
			PacientCiphed pCiphed = this.gestorService.consultarPacient(metge, pacient);
			if (pCiphed != null) {
				// llavors el metge té accés a l'historial del pacient, per tant podem consultar la
				// seva visita
				vTrobada = this.gestorService.consultarVisita(metge, pacient, visita);
			}
		} else {
			throw new SeghismedException("Metge [" + metge + "] no autenticat!!!!");
		}
		return vTrobada;
	}

	/**
	 * @param Estableix gestorService com a valor de la propietat gestorService
	 */
	public void setGestorService(GestorService gestorService) {
		this.gestorService = gestorService;
	}

	/**
	 * @param Estableix
	 *            metgeService com a valor de la propietat metgeService
	 */
	public void setMetgeService(MetgeService metgeService) {
		this.metgeService = metgeService;
	}

}
